﻿using System.Runtime.CompilerServices;
using System.Data;
using Negocio.View.Base;
using System;
using Negocio.Generico;
using System.Collections.Generic;

namespace Negocio.View
{
    /// <summary>
    /// View de la asignatura
    /// </summary>
    public class AsignaturaView : ViewBase
    {

        #region Singleton

        private static AsignaturaView instance;

        private AsignaturaView()
        {
            //Vacio
        }

        [MethodImpl(MethodImplOptions.Synchronized)]
        public static AsignaturaView GetInstance()
        {
            if (instance == null)
            {
                instance = new AsignaturaView();
            }
            return instance;
        }

        #endregion

        #region Constantes

        /// <summary>
        /// Codigo de la asignatura
        /// </summary>
        private const String CODIGOASIGNATURA = "CODIGOASIGNATURA";

        /// <summary>
        /// Codigo del persona
        /// </summary>
        private const String CODIGOPROFESOR = "CODIGOPROFESOR";

        /// <summary>
        /// Nombre de la asignatura
        /// </summary>
        private const String NOMBRE = "NOMBRE";

        /// <summary>
        /// Creditos de la asignatura
        /// </summary>
        private const String CREDITOSASIG = "CREDITOSASIG";

        /// <summary>
        /// Codigo de la titulacion asociada a la asignatura
        /// </summary>
        private const String CODIGOTITULACION = "CODIGOTITULACION";

        /// <summary>
        /// Nombre de la titulacion asociada a esta asignatura
        /// </summary>
        private const String TITULACION = "TITULACION";

        #endregion

        #region View

        /// <summary>
        /// Función que devueve la información correspondiente a una unica asignatura
        /// </summary>
        /// <param name="filter">Objeto que contiene el codigo de asignatura que queremos buscar</param>
        /// <returns>DataView con todos los datos devueltos de la asignatura</returns>
        public DataView GetAsignaturasViewByAsignatura(AsignaturaDTO filtro)
        {
            try
            {
                DataView dv = new DataView();
                DataTable dt = new DataTable();

                dt.Columns.Add(AsignaturaView.CODIGOASIGNATURA, this.GetTypeSqlInt32);
                dt.Columns.Add(AsignaturaView.CODIGOPROFESOR, this.GetTypeSqlInt32);
                dt.Columns.Add(AsignaturaView.NOMBRE, this.GetTypeString);
                dt.Columns.Add(AsignaturaView.CREDITOSASIG, this.GetTypeSqlInt32);
                dt.Columns.Add(AsignaturaView.CODIGOTITULACION, this.GetTypeSqlInt32);
                dt.Columns.Add(AsignaturaView.TITULACION, this.GetTypeString);
                using (Negocio.Generico.ContratoGenericoClient servicio = new Negocio.Generico.ContratoGenericoClient())
                {
                    foreach (AsignaturaDTO bean in servicio.Get(filtro))
                    {
                        DataRow fila = dt.NewRow();
                        fila[AsignaturaView.CODIGOASIGNATURA] = bean.CoAsignatura;
                        fila[AsignaturaView.CODIGOPROFESOR] = bean.CoProfesor;
                        fila[AsignaturaView.NOMBRE] = bean.Nombre;
                        fila[AsignaturaView.CREDITOSASIG] = bean.CreditosAsig;
                        //TODO: CAMBIAR,ESTURCTURA INTERMEDIAS
                        fila[AsignaturaView.CODIGOTITULACION] = bean.CoTitulacion;
                        fila[AsignaturaView.TITULACION] = bean.Titulacion;
                        dt.Rows.Add(fila);
                    }
                }
                return dt.DefaultView;
            }
            catch (Exception ex)
            {
                throw new ViewException(ex);
            }
        }

        #endregion
    }
}